package org.study.tdengine.mybatisplus.boot.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * TDengine超级表操作
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2024年06月06日
 */
public interface SuperTableMapper {
    /**
     * 显示当前数据库下的所有超级表信息
     *
     * @param stablePrefix 超级表前缀，用于模糊搜索
     */
    List<String> showStables(@Param("stablePrefix") String stablePrefix);

    /**
     * 显示一个超级表的创建语句
     *
     * @param stableName 超级表名称
     */
    Map<String, String> showCreateStable(@Param("stableName") String stableName);

    /**
     * 获取超级表的结构信息
     *
     * @param dbName     数据库名称
     * @param stableName 超级表名称
     */
    List<Map<String, Object>> describeStable(@Param("dbName") String dbName, @Param("stableName") String stableName);

    /**
     * 获取超级表中所有子表的标签信息：返回结果集的第一列为子表名，后续列为标签列
     *
     * @param dbName     数据库名称
     * @param stableName 超级表名称
     */
    List<Map<String, Object>> showStableTags1(@Param("dbName") String dbName, @Param("stableName") String stableName);

    /**
     * 获取超级表中所有子表的标签信息：返回结果集的第一列为子表名，后续列为标签列
     *
     * @param dbName     数据库名称
     * @param stableName 超级表名称
     */
    List<Map<String, Object>> showStableTags2(@Param("dbName") String dbName, @Param("stableName") String stableName);

    /**
     * 获取超级表中指定标签列的值
     * 注意：SELECT语句中的DISTINCT、TBNAME都是必不可少的，TDengine会根据它们对语句进行优化，使之在没有数据或数据非常多的情况下都可以正确并快速的返回标签值
     *
     * @param stableName  超级表名称
     * @param tagNameList 标签列名称集合
     */
    List<Map<String, Object>> showStableTags3(@Param("stableName") String stableName, @Param("tagNameList") List<String> tagNameList);

    /**
     * 获取某个子表的标签信息
     *
     * @param tableName 子表名称
     */
    List<Map<String, Object>> showTableTags1(@Param("tableName") String tableName);

    /**
     * 获取某个子表的标签信息
     * 同样的，也可以用 SELECT 语句来查询指定标签列的值
     *
     * @param tableName   子表名称
     * @param tagNameList 标签列名称集合
     */
    List<Map<String, Object>> showTableTags2(@Param("tableName") String tableName, @Param("tagNameList") List<String> tagNameList);
}
